/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle;

import entidades.Administrador;
import entidades.Apoio;
import entidades.Monitor;
import entidades.Professor;
import entidades.Usuario;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.AjaxBehaviorEvent;
import persistencia.RepositorioJPAUsuarios;

/**
 *
 * @author Gleydson
 */
@ManagedBean(name = "UsuariosBean")
@ViewScoped
public class UsuariosBean {
    
    private Usuario usuario;
    private RepositorioJPAUsuarios repositorioUsuarios;
    private List<Usuario> usuarios;
    private boolean insert;
    private String senhaRepetida;
    
    
    //atributos temporarios
    private String login;
    private String senha;
    private String nome;
    private String email;
    private String telefone;
    private String matricula;
    private String cpf;
    private String perfil;   

    private boolean showMatricula;
    /** Creates a new instance of UsuariosBean */
    public UsuariosBean(){
        showMatricula = false;
        repositorioUsuarios = new RepositorioJPAUsuarios();
        usuarios = repositorioUsuarios.getAll();
    }
    
    public void botaoNovoUsuarioAction(){
        insert = true;
        nome = "";
        email = "";
        telefone = "";
        matricula = "";
        cpf = "";
        perfil = null;
        
        
    }

    public void botaoAlterarUsuarioAction(){
        preencheCampos();
        insert = false;   
    }

    public void botaoApagarUsuarioAction(){
        repositorioUsuarios.delete(usuario);   
    }
    
    private void preencheUsuario(){
        usuario.setCpf(cpf);
        usuario.setEmail(email);
        usuario.setLogin(login);
        usuario.setSenha(senha);
        usuario.setTelefone(telefone);
        usuario.setNome(nome);
        usuario.setDtype(perfil);
        if(usuario instanceof Professor){
            ((Professor) usuario).setMatricula(matricula);
        }   
    }
    
    private void preencheCampos(){
        cpf = usuario.getCpf();
        email = usuario.getEmail();
        login = usuario.getLogin();
        senha = usuario.getSenha();
        telefone = usuario.getTelefone();
        nome = usuario.getNome();
        
        if(usuario instanceof Professor){
            matricula = ((Professor) usuario).getMatricula();
        }
        
    }
    
    public void botaoSalvarUsuarioAction(){
        if(insert){
            if(perfil.equals("Administrador")){
                usuario = new Administrador();
            };
            
            if(perfil.equals("Apoio")){
                usuario = new Apoio();
            };
            
            if(perfil.equals("Monitor")){
                usuario = new Monitor();
            };
            
            if(perfil.equals("Professor")){
                usuario = new Professor();
            };
            
            preencheUsuario();
            repositorioUsuarios.insert(usuario);
        }else{
            preencheUsuario();
            repositorioUsuarios.update(usuario);
        }
        usuarios = repositorioUsuarios.getAll();
    }

    public void selectOneChangePerfil(AjaxBehaviorEvent event){
       if(perfil.equals("Professor"))
        showMatricula = true;
       else
           showMatricula = false;
        
    }
    /**
     * @return the usuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * @param usuario the usuario to set
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * @return the repositorioUsuarios
     */
    public RepositorioJPAUsuarios getRepositorioUsuarios() {
        return repositorioUsuarios;
    }

    /**
     * @param repositorioUsuarios the repositorioUsuarios to set
     */
    public void setRepositorioUsuarios(RepositorioJPAUsuarios repositorioUsuarios) {
        this.repositorioUsuarios = repositorioUsuarios;
    }

    /**
     * @return the usuarios
     */
    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    /**
     * @param usuarios the usuarios to set
     */
    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    /**
     * @return the insert
     */
    public boolean isInsert() {
        return insert;
    }

    /**
     * @param insert the insert to set
     */
    public void setInsert(boolean insert) {
        this.insert = insert;
    }

    /**
     * @return the senhaRepetida
     */
    public String getSenhaRepetida() {
        return senhaRepetida;
    }

    /**
     * @param senhaRepetida the senhaRepetida to set
     */
    public void setSenhaRepetida(String senhaRepetida) {
        this.senhaRepetida = senhaRepetida;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the telefone
     */
    public String getTelefone() {
        return telefone;
    }

    /**
     * @param telefone the telefone to set
     */
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    /**
     * @return the matricula
     */
    public String getMatricula() {
        return matricula;
    }

    /**
     * @param matricula the matricula to set
     */
    public void setMatricula(String matricula) {
        this.matricula = matricula;
    }

    /**
     * @return the cpf
     */
    public String getCpf() {
        return cpf;
    }

    /**
     * @param cpf the cpf to set
     */
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    /**
     * @return the perfil
     */
    public String getPerfil() {
        return perfil;
    }

    /**
     * @param perfil the perfil to set
     */
    public void setPerfil(String perfil) {
        this.perfil = perfil;
    }

    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the showMatricula
     */
    public boolean isShowMatricula() {
        return showMatricula;
    }

    /**
     * @param showMatricula the showMatricula to set
     */
    public void setShowMatricula(boolean showMatricula) {
        this.showMatricula = showMatricula;
    }
}
